home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 46 / Amiga Format CD46 (1999-10-20)(Future Publishing)(GB)[!][issue 1999-12].iso / -in_the_mag- / reader_requests / scilab / demos / velpic / id_rgn.f < prev    next >
Text File  |  1999-09-16  |  2KB  |  66 lines

  1.       subroutine id_rgn(indexlist,linelist,seed,ind,nol,nolt,
  2.      +                  ic,icount,noe,newlist,bav,lln,ncount)
  3.       
  4. c Macro which determines all the indices of a matrix of dimension
  5. c (nz X nx) which are in the foobar defined by the seed and the 
  6. c linelist.  The elements which are in the same foobar as the seed
  7. c are those which are on the same side of all the lines in the
  8. c linelist.
  9. c  indexlist :(2xN) vector containing all the indices to be searched
  10. c  linelist  :list of lines
  11. c  seed      :pair of indices of the matrix identifying the foobar
  12. c  ind       :all indices of the matrix associated to the foobar
  13. c            :defined by seed
  14. c  author: C. Bunks     date: 12-NOV-90
  15.  
  16.       integer   ind,indexlist,newlist,noe,ix
  17.       integer   nol,nolt,flag,ncount,icount
  18.       real      seed,linelist,lln,bav,p1
  19.       dimension linelist(2,nolt),noe(ic),bav(3,nolt),seed(1,2)
  20.       dimension indexlist(2,ic),newlist(2,ic),p1(1,2)
  21.       dimension ind(2,ic),lln(2,nolt)
  22.  
  23. c if the line segment defined by the seed and another pair of indices
  24. c intersects any line in the linelist then that pair of indices is
  25. c not in the foobar
  26.  
  27.       ncount=0
  28.       icount=0
  29.       do 10 ii=1,ic 
  30. c     !cycle through all indices
  31.          p1(1,1)=float(indexlist(1,ii))
  32.          p1(1,2)=float(indexlist(2,ii))
  33.          ln=1
  34.          flag=0               
  35. c     !while flag=0 cycle thru lines
  36.          do while(flag.eq.0)  
  37. c     !cycle thru edges till xsection occurs
  38.             if(ln.le.nol)then
  39.                noe1=noe(ln)
  40.                noe2=noe(ln+1)-1
  41.                do 20 ll=noe1,noe2
  42.                   lln(1,ll-noe1+1)=linelist(1,ll)
  43.                   lln(2,ll-noe1+1)=linelist(2,ll)
  44.  20            continue
  45.                call testpt(p1,float(seed),noe2-noe1+1,lln,flag,ix,bav)
  46.                if(flag.eq.1)then 
  47. c     !intersection occurred
  48.                   ncount=ncount+1
  49.                   newlist(1,ncount)=int(p1(1,1))
  50.                   newlist(2,ncount)=int(p1(1,2))
  51.                endif
  52.             else        
  53. c     !no intersection occurred for index pair
  54.                icount=icount+1
  55.                ind(1,icount)=int(p1(1,1))
  56.                ind(2,icount)=int(p1(1,2)) 
  57.                flag=1
  58.             endif
  59.             ln=ln+1
  60.          end do
  61.  10   continue
  62.  
  63.       return
  64.       end
  65.